package com.mazaiting.redeye.api

import com.mazaiting.easy.base.bean.BaseBean
import com.mazaiting.easy.base.bean.Response
import com.mazaiting.redeye.base.Config
import com.mazaiting.redeye.bean.*
import io.reactivex.Observable
import okhttp3.MultipartBody
import retrofit2.http.*

/**
 * 用户 api
 */
interface UserApiService {

    /**
     * 获取公钥
     * @return 通知
     */
    @GET(Config.URL_USER_PUBLIC_KEY)
    fun publicKey(): Observable<BaseBean>

    /**
     * 登录
     * @param user 用户信息
     * @return 通知
     */
    @POST(Config.URL_USER_LOGIN)
    fun login(
        @Body user: UserBean
    ): Observable<Response<Request<UserBean>>>

    /**
     * 注册
     * @param user 用户信息
     * @return 通知
     */
    @POST(Config.URL_USER_REGISTER)
    fun register(
        @Body user: UserBean
    ): Observable<BaseBean>

    /**
     * 上传图片
     * @return 通知
     */
    @Multipart
    @POST(Config.URL_UPLOAD_IMAGE)
    fun uploadImage(
        @Part filePart: MultipartBody.Part
    ): Observable<Response<List<ImageBean>>>

    /**
     * 获取用户详细信息
     * @param requestBean 用户信息
     */
    @POST(Config.URL_USER_INFORMATION)
    fun information(
        @Body requestBean: Request<UserBean>
    ): Observable<Response<UserBean>>

    /**
     * 更新用户信息
     * @param requestBean 用户信息
     */
    @POST(Config.URL_USER_UPDATE_USER)
    fun updateUser(
        @Body requestBean: Request<UserBean>
    ): Observable<BaseBean>

    /**
     * 更新手机号
     * @param requestBean 验证码信息
     */
    @POST(Config.URL_USER_UPDATE_PHONE)
    fun updatePhone(
        @Body requestBean: Request<VerifyCodeBean<UserBean>>
    ): Observable<BaseBean>

    /**
     * 获取偏好类别
     * @param request Token 信息
     */
    @POST(Config.URL_WORM_FEED)
    fun feed(
        @Body request: Request<Any>
    ): Observable<Response<List<FeedBean>>>

    /**
     * 获取 Tab 数据
     * @param request Token 信息
     */
    @POST(Config.URL_WORM_MEDIA_LIST)
    fun mediaList(
        @Body request: Request<Any>
    ): Observable<Response<List<String>>>

    @POST("test/hello")
    fun hello(
        @Body requestBean: Request<UserBean>
    ): Observable<BaseBean>

}
